/*
 * 项目名称:    wms-server-jeecg
 * 创建人员:    DongPeng
 * 创建时间:    2023-09-12
 * copyright(c) 2022 无锡星智数服科技有限公司
 */
package org.jeecg.modules.dock.config;

import lombok.experimental.UtilityClass;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 泛型工具类
 *
 * @author DongPeng
 * @version 1.0.0
 * @date 2023-09-12
 * @description 类描述
 */
@UtilityClass
public class GenericUtil {
    /**
     * 通过反射,获得定义Class时声明的父类的范型参数的类型
     *
     * @param clazz 类
     * @return 返回第一个类型
     */
    public Class<?> getSuperClassGenericType(Class<?> clazz) {
        return getSuperClassGenericType(clazz, 0);
    }

    /**
     * 通过反射,获得定义Class时声明的父类的范型参数的类型
     *
     * @param clazz 类
     * @param index 泛型索引
     */
    public Class<?> getSuperClassGenericType(Class<?> clazz, int index)
            throws IndexOutOfBoundsException {
        Type genType = clazz.getGenericSuperclass();
        if (!(genType instanceof ParameterizedType)) {
            return Object.class;
        }
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
        if (index >= params.length || index < 0) {
            return Object.class;
        }
        if (!(params[index] instanceof Class)) {
            return Object.class;
        }
        return (Class<?>) params[index];
    }
}